In 1980, Intel® Corporation released the first MCS-51 microcontroller (hereinafter, also referred to as the “8051 microcontroller”). The 8051 microcontroller includes a single 16-bit data pointer register (DPTR) for performing indirect addressing on data memory or indexed addressing on program memory. The 8051 microcontroller utilized an MCS-51 instruction set, which included six instructions that directly referenced the data pointer as an operand. The six instructions are shown in Table I below.
TABLE IMCS-51 Data Pointer InstructionsData Pointer InstructionsOpcodeMOV DPTR, #immediate 1690hINC DPTRA3hMOVC A, @A+DPTR93hMOVX A, @DPTRE0hMOVX @DPTR, AF0hJMP @A+DPTR73h
The 8051 microcontroller supports up to 64 kilobytes of main data memory. The memory can be accessed in a load-store manner using the MOVX A, @DPTR and MOVX @DPTR, A instructions, shown in Table I above. The use of a single data pointer can create a bottleneck when accessing data memory. For example, a block copy routine, which copies data from one location to another, requires several manipulations to maintain pointers to both the source and destination addresses.
Since 1980, several companies have produced 8051-based microcontrollers which include a second data pointer to help alleviate the bottleneck problem described above. Because the MCS-51 instruction set does not include instructions for supporting multiple data pointers directly, some of these conventional microcontrollers used a control bit called Data Pointer Select (DPS) in a configuration register to select between registers in a dual data pointer register configuration. For example, setting DPS=0 could be used to select a first data pointer register as active, and setting DPS=1 could be used to select a second data pointer register as active. Typically, all six data pointer instructions in the MCS-51 instruction set were affected by the DPS setting.